iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0

當你需要快取,或是只需要簡單的key-value儲存資料時,redis會是你的好選擇,
而要在go內使用redis,可以透過redigo套件。

建立連線池

pool := &redis.Pool{
		// Other pool configuration not shown in this example.
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial("tcp", "127.0.0.1:6379")
			if err != nil {
				log.Println(err)
				return nil, err
			}

			_, err = c.Do("SELECT", "0")
			if err != nil {
				errClose := c.Close()
				if errClose != nil {
					log.Println(err)
					return nil, errClose
				}
				log.Println(err)
				return nil, err
			}
			return c, nil
		},
	}

單純建立連線池的話這樣就可以了,不過對於連線池,通常會設定最大連線數,跟timeout,
避免連線被一直佔著。

	pool.MaxActive = config.RedisMaxActive
	pool.IdleTimeout = 10 * time.Minute

而要下任何指令前,必須要從連線池內取出連線,並且設個defer把連線給關閉。

c := coeusRpool.Get()
	defer c.Close()

SET

要將資料存入redis內,要使用SET指令

        _, err = c.Do("set", "user-name", "jim")
		if err != nil {
			
			return
		}

第一個參數是key,第二個是值,基本上是儲存string進去,不過也有其他的值,不過這邊不多作介紹

GET

要從redis內取出指定key的資料,則是要使用GET指令

value, err := redis.String(c.Do("GET", "user-name"))
				if err != nil {
					
					return
				}

針對被取出來的資料,如果知道型別,可以指定別的型別:

value, err := redis.Int(c.Do("GET", "user-name"))
				if err != nil {
					
					return
				}

DEL

當你不需要資料,或是定期需要清除資料,則需要用DEL指令

_, err = c.Do("DEL", "user-name")
	if err != nil {
		
		return
	}

就可以把當初寫入的值刪除了。


上一篇
Day17-Scylla
下一篇
Day19-平行處理 goroutine
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言